1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.cache;
18
19 import com.google.common.annotations.GwtCompatible;
20 import com.google.common.base.Supplier;
21
22 import java.util.concurrent.atomic.AtomicLong;
23
24
25
26
27
28
29
30 @GwtCompatible(emulated = true)
31 final class LongAddables {
32 private static final Supplier<LongAddable> SUPPLIER;
33
34 static {
35 Supplier<LongAddable> supplier;
36 try {
37 new LongAdder();
38 supplier = new Supplier<LongAddable>() {
39 @Override
40 public LongAddable get() {
41 return new LongAdder();
42 }
43 };
44 } catch (Throwable t) {
45 supplier = new Supplier<LongAddable>() {
46 @Override
47 public LongAddable get() {
48 return new PureJavaLongAddable();
49 }
50 };
51 }
52 SUPPLIER = supplier;
53 }
54
55 public static LongAddable create() {
56 return SUPPLIER.get();
57 }
58
59 private static final class PureJavaLongAddable extends AtomicLong implements LongAddable {
60 @Override
61 public void increment() {
62 getAndIncrement();
63 }
64
65 @Override
66 public void add(long x) {
67 getAndAdd(x);
68 }
69
70 @Override
71 public long sum() {
72 return get();
73 }
74 }
75 }